A portion of the disclosure of this patent document contains material to which the claim of copyright protection is made. The copyright owner has no objection to the facsimile reproduction by any person of the patent document or the patent disclosure, as it appears in the U.S. Patent and Trademark Office file or records, but reserves all other rights whatsoever. In particular the claim of copyright protection extends to code and pseudocode printed herein.
The present invention relates generally to graphical user interfaces and, more particularly, to routing events to an appropriate user interface object in a computer system.
Events communicate information about user actions, changes in the processing status of an application and other occurrences that may require response from an application. For example, events include, but are not limited to, user input, system messaging events which are messages to an application and generated by the operating system, and interapplication events which communicate between co-existing applications.
Events which are directed to human interface elements are typically referred to as human interface events (xe2x80x9cHI eventsxe2x80x9d). Examples of human interface elements include, but are not limited to, windows, panels, editable text, push buttons, list boxes, radio buttons, etc.
Generally, event loops are used to process events. Typically, the inside of the loop is structured to determine the kind of event and then to branch to code to handle that particular kind of event. The kind of event is generally hard-coded into the event loop. For example, a line of code might read:
if (event==mouse_down)
then call handle_mouse_down;
else if (event==keyboard_click)
then call handle_keyboard_click;
Such systems have several disadvantages. First, there is generally no mechanism for explicitly adding new kinds of events without actually editing the code of the programming structure. Changing the code generally requires recompiling and building of the program and is thus undesirable.
Second, since the sequence performed in checking the kind of event is statically defined, applications may check for events in which there is no interest. For example, a particular application may be interested in mouse events, but not keyboard events. Even so, if the keyboard events precede mouse events in the checking sequence, the application will waste resources checking whether the event is a keyboard event.
Third, this style of event dispatching architecture tends to be either limiting or inefficient when arbitrary components may be inserted into an application. For example, an application may allow third parties to provide custom plugins. Such a plugin might be interested in an event that the application does not itself use. Typically, an application will either (a) not pass the event to the plugin, in which case the plugin cannot react to it, or (b) pass all unhandled events to every plugin, even if a given plugin is not interested in a particular event, leading to greater overhead and slower performance during event dispatching.
Similarly, in a window/root panel/subpanel windowing architecture, a subpanel may recognize an event that a parent panel does not. The parent panel is required to pass an event it doesn""t recognize to one of its subpanels.
Briefly, the present invention provides a method and apparatus for routing arbitrary human interface events to an appropriate human interface object. The present invention provides extensibility that allows new, arbitrary human interface events to be added and, preferably, provides a registration process that permits applications to register interest in events.
According to an aspect of the invention, a plurality of routing mechanisms are used to route human interface events, each type of event being routed according to at least one of the plurality of routing mechanisms. Specifically, the plurality of routing mechanisms includes, among possibly others, one or more of the following routing mechanisms: geometric, focus and broadcast. In particular, a geometric routing mechanism operates to route an event according to the location at which the event occurred. A focus routing mechanism operates to route an event according to the input focus. A broadcast routing mechanism routes an event to a plurality of human interface objects, such as all, or substantially all, of the human interface objects in a particular window or multiple windows.
According to another aspect of the invention, an object registers interest in an event through an interface with an event handler. The object specifies the event in which it is interested, as well as the routing mechanism for that event.
According to another aspect of the invention, a count is maintained as to the number of objects interested in a particular event. When the count indicates that there are no longer any events interested in a particular event, that event is removed from the event table.
The invention provides several advantages, among others. First, it provides extensibility, allowing new, arbitrary kinds of events to be added, recognized and routed, without altering programming code that would require recompiling.
Second, the invention provides efficiency by allowing an application to register the kinds of events for which it is interested in receiving information. Thus, resources are not wasted in needlessly examining events which are of no interest.